package com.guli.msmService.controller;

import com.guli.commonUtils.R;
import com.guli.commonUtils.RandomUtil;
import com.guli.msmService.service.impl.MsmServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author zxc
 * @date 2023/04/12 20:17
 **/
@Api(description = "阿里云短信发送服务")
@RestController
@RequestMapping("edu/msmService")
//@CrossOrigin
@ResponseBody
public class MsmController {
    @Autowired
    private MsmServiceImpl msmService;

    // 注入redisTemplate，用来对于redis缓存进行操作;
    @Autowired
    private RedisTemplate<String , String> redisTemplate;

    @ApiOperation(value = "发送短信")
    @GetMapping("sendMsm/{phoneNumber}")
    public R sendMsm(
            @ApiParam(name = "phoneNumber" , value = "手机号",required = true)
            @PathVariable String phoneNumber){
        // 在redis中查询，是否存在该手机号对应的验证码;
        String code = redisTemplate.opsForValue().get(phoneNumber);
        if(!StringUtils.isEmpty(code)){
            return R.ok().message("该验证码已经被发送过，请注意查收！！！");
        }
        // 当前手机号对应验证码在redis缓存中不存在 :
        code = RandomUtil.getSixBitRandom();
        /**
         * 思考 ：为什么要使用map集合，来封装验证码code？
         * ===》
         * 即，后续向发送请求request中封装验证码时，所需要的数据结构为JSON对象数据结构;
         */
        Map<String , String> map = new HashMap<>();
        map.put("code" , code);
        boolean isSuccess = msmService.sendMsm(phoneNumber , map);
        if(isSuccess){
            // 设置该验证码的有效时间
            redisTemplate.opsForValue().set(phoneNumber , code , 5 , TimeUnit.MINUTES);
            return R.ok().message("验证码发送成功，请注意查收！！！");
        }
        else {
            return R.ok().message("验证码发送失败！！！");
        }
    }
}
